-- 定义插件任务
task("win32")
do
  -- 设置类别为插件
  set_category("plugin")
  -- 设置插件菜单
  set_menu({
    usage = "xmake win32 [target]",
    description = "Generate a win32 project",
    options = {
      { nil, "target", "v", nil, "a00" },
    },
  })

  -- 插件运行入口
  on_run(function()
    import("core.base.option")

    -- 获取目标项目名称，默认为 "a00"
    local target_name = option.get("target") or "a00"
    print("生成项目: %s", target_name)
    local project_root = path.join(os.curdir(), target_name)

    -- 定义项目目录结构
    local project_dirs = {
      path.join(project_root, "src"),
    }

    -- 创建目录
    for _, dir in ipairs(project_dirs) do
      os.mkdir(dir)
      print("创建目录: %s", dir)
    end

    local xmake_content = string.format(
      [[add_rules("mode.debug", "mode.release")
set_languages("c++latest")

target("%s", function()
  set_kind("binary")
  add_files("src/**.cpp")
  add_files("src/**.rc")
  add_rules("win.sdk.application")
  add_cxflags("/source-charset:utf-8")
  add_defines("UNICODE", "_UNICODE")
end)
    ]],
      target_name
    )
    local xmake_file = path.join(project_root, "xmake.lua")
    io.writefile(xmake_file, xmake_content)
    print("生成文件: %s", xmake_file)

    local main_cpp_content = [[#include <Windows.h>

HINSTANCE INST; // 程序实例句柄

// 声明窗口过程函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

// 应用程序入口点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nCmdShow) {
  INST = hInstance; // 保存程序实例句柄

  // 定义窗口类名
  const TCHAR CLASS_NAME[]{L"Sample Window Class"};

  // 填充 WNDCLASSEX 结构
  WNDCLASSEX wc{0};
  wc.cbSize = sizeof(WNDCLASSEX);
  wc.style = CS_VREDRAW | CS_HREDRAW;
  wc.lpfnWndProc = WindowProc;                   // 窗口过程函数指针
  wc.hInstance = hInstance;                      // 当前程序实例句柄
  wc.lpszClassName = CLASS_NAME;                 // 窗口类名
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);      // 使用默认箭头光标
  wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 默认窗口背景色

  // 注册窗口类
  RegisterClassEx(&wc);

  // 创建窗口
  HWND hwnd =
      CreateWindowEx(0,                   // 扩展窗口样式
                     CLASS_NAME,          // 窗口类名
                     L"简单窗口",         // 窗口标题
                     WS_OVERLAPPEDWINDOW, // 窗口样式
                     // 位置和大小
                     CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                     NULL,      // 父窗口
                     NULL,      // 菜单
                     hInstance, // 程序实例句柄
                     NULL       // 附加数据
      );

  if (hwnd == NULL) {
    return 0;
  }

  // 显示窗口
  ShowWindow(hwnd, nCmdShow);
  UpdateWindow(hwnd);

  // 消息循环
  MSG msg = {0};
  while (GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }

  return msg.wParam;
}

// 窗口过程函数，处理发送到窗口的消息
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
                            LPARAM lParam) {
  switch (uMsg) {
  case WM_DESTROY:
    PostQuitMessage(0); // 当窗口被销毁时，退出消息循环
    return 0;
  case WM_PAINT: {
    PAINTSTRUCT ps{};
    HDC hdc = BeginPaint(hwnd, &ps);
    // 这里可以进行绘制操作
    FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
    EndPaint(hwnd, &ps);
  }
    return 0;
  }
  // 对于我们不处理的消息，返回默认处理
  return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
]]
    local main_cpp_file = path.join(project_root, "src", "main.cpp")
    io.writefile(main_cpp_file, main_cpp_content)
    print("生成文件: %s", main_cpp_file)

    print("项目 '%s' 生成成功！", target_name)
    print("项目结构：")
    print("  " .. target_name .. "/")
    print("  ├── src/")
    print("  │   └── main.cpp")
    print("  └── xmake.lua")
    print("接下来，你可以：")
    print("  - 进入项目目录: cd " .. target_name)
    print("  - 使用 Xmake 构建: xmake")
    print("  - 使用 Xmake 运行: xmake r")
  end)
end
